package cashpointer.core.model;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Klasa do przechowywania polozenia geograficznego bankomatu.
 * @author wojciech topolski
 * @version 2009-03-25
 */
@XStreamAlias("GeoPoint")
public class GeoPoint {

    // Logger.
    static private Log log = LogFactory.getLog(GeoPoint.class);

    // Szerokosc geograficzna.
    @XStreamAlias("latitude")
    private Double latitude;

    // Dlugosc geograficzna.
    @XStreamAlias("longitude")
    private Double longitude;

    /**
     * Konstruktor.
     */
    public GeoPoint() {
        
    }

    /**
     * Konstruktor.
     * @param latitude Double
     * @param longitude Double
     */
    public GeoPoint(Double latitude, Double longitude) {
        this.latitude = latitude;
        this.longitude = longitude;
    }

    /**
     * Konstruktor.
     * @param latitude String
     * @param longitude String
     */
    public GeoPoint(String latitude, String longitude) {
        // Konwersja wartosci latitude na typ Double.
        try {
            this.latitude = Double.parseDouble(latitude);
        }
        catch (NumberFormatException nfe) {
            if (log.isErrorEnabled()) {
                log.error("[GeoPoint::GeoPoint(String latitude, String longitude)] Blad konwertowania latitude dla " + latitude);
                log.error(nfe.getMessage());
            }
        }

        // Konwersja wartosci longitude na typ Double.
        try {
            this.longitude = Double.parseDouble(longitude);
        }
        catch (NumberFormatException nfe) {
            if (log.isErrorEnabled()) {
                log.error("[GeoPoint::GeoPoint(String latitude, String longitude)] Blad konwertowania longitude dla " + longitude);
                log.error(nfe.getMessage());
            }
        }
    }

    /**
     * Zwraca wartosc dla latitude.
     * @return Double
     */
    public Double getLatitude() {
        return latitude;
    }

    /**
     * Ustawia wartosc latitude.
     * @param latitude Double
     */
    public void setLatitude(Double latitude) {
        this.latitude = latitude;
    }

    /**
     * Ustawia wartosc latitude.
     * @param latitude String
     */
    public void setLatitude(String latitude) {
        // Konwersja wartosci latitude na typ Double.
        try {
            this.latitude = Double.parseDouble(latitude);
        }
        catch (NumberFormatException nfe) {
            if (log.isErrorEnabled()) {
                log.error("[GeoPoint::setLatitude(String latitude)] Blad konwertowania latitude dla " + latitude);
                log.error(nfe.getMessage());
            }
        }
    }

    /**
     * Zwraca wartosc dla longitude.
     * @return Double
     */
    public Double getLongitude() {
        return longitude;
    }

    /**
     * Ustawia wartosc longitude.
     * @param latitude Double
     */
    public void setLongitude(Double longitude) {
        this.longitude = longitude;
    }

    /**
     * Ustawia wartosc longitude.
     * @param latitude String
     */
    public void setLongitude(String longitude) {
        // Konwersja wartosci longitude na typ Double.
        try {
            this.longitude = Double.parseDouble(longitude);
        }
        catch (NumberFormatException nfe) {
            if (log.isErrorEnabled()) {
                log.error("[GeoPoint::setLongitude(String longitude)] Blad konwertowania longitude dla " + longitude);
                log.error(nfe.getMessage());
            }
        }
    }
}
